/*******************************************************************************
* 模块名:key
* 描述:按键相关函数
* 作者:LUKE&Liu
* 创建时间:2022/06/28 15:58:26
******************************************************************************/
#include <key.h>

/*******************************************************************************
* 函数名:delay_ms()
* 代码描述:延时函数
* 参数:ms,延时毫秒数
* 作者:LUKE&Liu
* 创建时间:2022/06/28 20:11:34
******************************************************************************/
void static delay_ms(unsigned int ms)
{
  unsigned short tmp;
  while(ms--)
  {
    for(tmp = 1000;tmp > 0;tmp--)
    {

    }
  }
}

/*******************************************************************************
* 函数名:key_init()
* 代码描述:按键初始化函数
* 参数:无    
* 作者:LUKE&Liu
* 创建时间:2022/06/28 16:07:07
******************************************************************************/
void key_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;  //按键结构体  
  RCC_AHB1PeriphClockCmd(KEY_GPIO_CLK,ENABLE);

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;  //输入
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  //推免输出
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  //上拉
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN | KEY2_GPIO_PIN;
  
  GPIO_Init(KEY_GPIO_PORT,&GPIO_InitStructure);
}

/*******************************************************************************
* 函数名:key_scan
* 代码描述:按键扫描函数
* 参数:无    
* 作者:LUKE&Liu
* 创建时间:2022/06/28 16:06:08
******************************************************************************/
unsigned char key_scan(void)
{
  unsigned char key_status = GPIO_ReadInputDataBit(KEY_GPIO_PORT,KEY1_GPIO_PIN);
  unsigned char key_result = 0x00;;

  while(!(KEY1) || !(KEY2))
  {     
    delay_ms(50); //去除抖动 
    if(!KEY1)
    {
      key_result = 0x01;
    }
    else if(!KEY2)
    {
      key_result = 0x02;
    }
  }
  return key_result;
}
